package com.xtinno.pojo.dto;

import java.util.List;
import java.util.Map;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

/**
 * 法条推导的统一请求入参对象.
 * TODO: 把类搞到 controller 同一个模块去.
 *
 * <pre>{@code
 * {
 *   "scenario": "1",
 *   "type": "1",
 *   "log": true,
 *   "lawKnowledgeMetadataCondition": {
 *     "caseType": "zcaj",
 *     "caseCause": "1658"
 *   },
 *   "params": {
 *     "paragraphs": [
 *       {
 *         "key": "MS_IM_Litigation Request",
 *         "value": "仲裁请求：\r1、依法裁决被申请人偿还申请人借款55万元；\r2、依法裁决被申请人支付逾期违约金5500元并按照年利率18%支付自2021年12月12日至实际清偿完毕之日的利息；\r3、本案仲裁费、律师费、交通费等追偿相关费用由被申请人承担。"
 *       },
 *       {
 *         "key": "MS_IM_Facts and Reasons",
 *         "value": "事实与理由：\r被申请人王荣兴于2021年5月15日向申请人唐伟丽借款200万元。申请人唐伟丽按约定，以银行转账的方式向被申请人王荣兴支付了借款本金200万元。出借该款后经申请人催要，被申请人王荣兴于2021年6月9日、2021年8月16日、2021年9月20日，分三笔向申请人偿还借款20万元、100万元、25万元，共计145万元。对剩余55万元借款经申请人催要未偿还。经双方交涉后签订借款协议一份并由被申请人出具收条一份。借款协议中双方对借款金额、借款期限、逾期违约金、罚息、超期利息均作出明确约定。借款到期后，申请人经多次向被申请人催要，被申请人均拒绝偿还，严重侵犯了申请人的合法权利。\r为此，申请人为维护自身的合法权利，根据仲裁法及双方约定的仲裁条款，特向贵委提出仲裁申请，望依法支持申请人的仲裁请求。"
 *       }
 *     ]
 *   }
 * }
 * }</pre>
 *
 * @author lizhen
 * @since 1.0.0
 */
@Data
public class LawReasoningRequestDTO {
	/**
	 * 法律推导场景，场景理解为一个大的分类，也就是一级分类，这里设计了一级分类的主要原因，是例
	 * 如：文书生成的法条推导、庭审过程中的法条推导，在这些场景下，处理逻辑有很大的相似性.
	 */
	@Schema(description = "法律推导场景")
	private String scenario;

	/**
	 * 场景推导的分类，这个分类是场景一级分类下的二级分类.
	 */
	@Schema(description = "场景推导的分类")
	private String type;

	/**
	 * 日志输出.
	 */
	@Schema(description = "日志输出")
	private boolean log = false;

	/**
	 * 日志级别（1 -> think, 2 -> in & think & out）
	 */
	@Schema(description = "日志级别（1->think, 2->in & think & out）")
	private int logLevel = 1;

	/**
	 * 知识库检索条件.
	 */
	@Schema(description = "知识库检索条件")
	private LawKnowledgeMetadataCondition lawKnowledgeMetadataCondition;

	/**
	 * 法律推导传入的参数.
	 * 20250603 把原来的 map 修改成一个对象了，原因是来不及用 map 写代码了，先固定接受了，后面兼容的时候，再改回去使用 map.
	 */
	@Schema(description = "法律推导传入的参数")
	private Param params;
//	private Map<String, String> params;

	@Data
	public static class LawKnowledgeMetadataCondition {
		/**
		 * 案件类型.
		 */
		@Schema(description = "案件类型")
		private String caseType;

		/**
		 * 案由.
		 */
		@Schema(description = "案由")
		private String caseCause;
	}

	@Data
	public static class Param {
		@Schema(description = "段落")
		private List<Paragraph> paragraphs;
	}

	@Data
	public static class Paragraph {
		@Schema(description = "段落的 key")
		private String key;

		@Schema(description = "段落的 name")
		private String name;

		@Schema(description = "段落的 value")
		private String value;
	}
}
